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
la source
cat ... |
est rarement nécessaire. La plupart des commandes Unix aimentcut
prendre un ou plusieurs fichiers d'entrée comme arguments, par exemplecut -d" " -f5 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 sur l'utilisationcut
, vous pouvez utilisersed
pour convertir chaque instance de deux ou plusieurs espaces en un seul onglet (cut
le délimiteur par défaut de) avant de passer en coupe:la source
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.la source
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:
la source
awk
ne fonctionnera pas" dans votre exemple est que le document ici n'est pas cité, ce$2
qui signifie que le serait étendu par le shell au deuxième paramètre positionnel. La solution n'est probablement pas de passer à unegrep
commande mais d'échapper au$
in$2
as\$2
ou de simplement citer l'intégralité du document en utilisant<<'EOF'
à la place de<<EOF
. Notez également que la tâche dans votre exemple est plus simplement effectuée parpgrep
.