J'ai un fichier avec trois colonnes. Je voudrais supprimer la 3ème colonne (édition sur place). Comment puis-je faire cela avec awk ou sed?
123 abc 22.3
453 abg 56.7
1236 hjg 2.3
Sortie désirée
123 abc
453 abg
1236 hjg
Cela pourrait fonctionner pour vous (GNU sed):
sed -i -r 's/\S+//3' file
Si vous souhaitez supprimer l'espace blanc avant le 3ème champ:
sed -i -r 's/(\s+)?\S+//3' file
essayez cette petite chose:
awk '!($3="")' file
Avec GNU awk pour l'édition in-situ, \s/\S
et gensub()
to delete
1) le champ FIRST:
awk -i inplace '{sub(/^\S+\s*/,"")}1' file
ou
awk -i inplace '{$0=gensub(/^\S+\s*/,"",1)}1' file
2) le dernier champ:
awk -i inplace '{sub(/\s*\S+$/,"")}1' file
ou
awk -i inplace '{$0=gensub(/\s*\S+$/,"",1)}1' file
3) le Nth champ où N = 3:
awk -i inplace '{$0=gensub(/\s*\S+/,"",3)}1' file
Sans GNU awk, vous avez besoin d'un combo match()
+ substr()
ou de plusieurs sub()
s + vars pour supprimer un champ du milieu. Voir aussi Imprimer toutes les colonnes sauf les trois premières .
Il semble que vous pourriez simplement aller avec
awk '{print $1 " " $2}' file
Ceci imprime les deux premiers champs de chaque ligne de votre fichier d’entrée, séparés par un espace.
GNU awk 4.1
awk -i inplace NF--
Cela supprimera le dernier champ de chaque ligne.
Essaye ça :
awk '$3="";1' file.txt > new_file && mv new_file file.txt
ou
awk '{$3="";print}' file.txt > new_file && mv new_file file.txt
Essayez d'utiliser cut ... c'est rapide et facile
D'abord, vous avez des espaces répétés, vous pouvez les réduire à un seul espace entre les colonnes si c'est ce que vous voulez avec tr -s ' '
Si chaque colonne ne contient déjà qu'un seul séparateur, vous pouvez utiliser cut -d ' ' -f-2
pour imprimer les champs (colonnes) <= 2.
par exemple, si vos données sont dans un fichier input.txt, vous pouvez effectuer l’une des opérations suivantes:
cat input.txt | tr -s ' ' | cut -d ' ' -f-2
Ou si vous avez une meilleure raison de résoudre ce problème en supprimant la 3ème colonne, vous pouvez écrire ce qui suit
cat input.txt | tr -s ' ' | cut -d ' ' --complement -f3
cut est assez puissant, vous pouvez également extraire des plages d'octets ou de caractères, en plus des colonnes
extrait de la page de manuel sur la syntaxe pour spécifier la plage de liste
Each LIST is made up of one range, or many ranges separated by commas.
Selected input is written in the same order that it is read, and is
written exactly once. Each range is one of:
N N'th byte, character or field, counted from 1
N- from N'th byte, character or field, to end of line
N-M from N'th to M'th (included) byte, character or field
-M from first to M'th (included) byte, character or field
de sorte que vous auriez également pu dire que vous souhaitiez des colonnes spécifiques 1 et 2 avec ...
cat input.txt | tr -s ' ' | cut -d ' ' -f1,2