web-dev-qa-db-fra.com

couper la colonne 2 du fichier texte

Mon fichier texte n'a pas de délimiteur pour spécifier le séparateur juste des espaces, comment puis-je couper la colonne 2 dans le fichier de sortie,

39    207  City and County of San Francisc   REJECTED          MAT = 0
78    412  Cases and materials on corporat   REJECTED          MAT = 0
82    431  The preparation of contracts an   REJECTED          MAT = 0

Donc, la sortie dont j'ai besoin est

207
412
432
15
riley

C'est plus simple avec awk qui traite plusieurs espaces consécutifs comme un seul, donc

awk '{print $2}' file

impressions

207
412
431

Mais évidemment, il existe de très nombreux autres outils qui feront le travail, même non conçus pour des tâches telles que grep:

grep -Po '^[^ ]+[ ]+\K[^ ]+' file
13
jimmij

Utilisez des tuyaux pour envoyer vos données (par exemple, cat columns.txt) en coupe.

cat columns.txt | cut -d" " -f5

Dans l'exemple de données que vous avez fourni, un seul délimiteur d'espace place les données souhaitées dans le champ 5. Pour envoyer cette sortie dans un autre fichier, utilisez la redirection.

cat collumns.txt | cut -d" " -f5 > field2.txt

En utilisant la commande awk, vous pouvez faire quelque chose comme ci-dessous qui reconnaît automatiquement le champ que vous recherchez car il y a des données (?) J'ai besoin d'en savoir plus sur awk.

awk -F' ' '{print $2}' columns.txt
6
aeiounix

comme l'a dit @jimmij, awk '{print $2}' file est la réponse la plus simple.

Si, pour une raison quelconque, vous ne voulez pas utiliser awk et insistez pour utiliser cut, vous pouvez utiliser sed pour convertir chaque instance de deux ou plusieurs espaces en un un seul onglet (le délimiteur par défaut de cut) avant de passer en coupe:

$ sed -e 's/  \+/\t/g' riley.txt | cut -f2 
207
412
431
1
cas
grep -Po '^[^ ]+[ ]+\K[^ ]+' file

Ce qui précède est très utile lorsque les utilitaires Linux comme awk pour l'extraction de données ne fonctionnent pas si vous passez à l'utilisateur "root" dans un script Shell comme ci-dessous:

Sudo -i <<EOF
ps aux | grep -E -i "[l]js"  |grep -v "javaagent" | awk '{print $2}' # So awk won't work here
ps aux | grep -E -i "[l]js"  | grep -v "javaagent" | grep -Po '^[^ ]+[ ]+\K[^ ]+'
EOF
0
Alok Tiwari

Vous pouvez toujours utiliser des espaces simples comme délimiteur, vous aurez juste plus de colonnes. Augmentez la valeur que vous donnez à cut -d' ' -f de 2 à 5, ou peut-être 6. Augmentez le nombre jusqu'à ce que vous obteniez les résultats souhaités.

0
Ryder