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
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
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
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
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
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.