web-dev-qa-db-ja.com

awkまたはcutまたはperlを使用して特定の列を選択する

タブ区切りファイルから7列目を選択する必要があります。例えば:

cat filename | awk '{print $7}'

問題は、4列目のデータに複数の値があり、その間に空白があるということです。例-以下の出力の最後の行:

user  \Adminis FL_vol Design         0         -       1       -
group        0 FL_vol Design   19324481         -    3014       -
user      \MAK FL_vol Design   16875161         -    2618       -
tree       826 FL_vol Out Global Doc Mark     16875162         -    9618       - /vol/FL_vol/Out Global Doc Mark
16
javed

データがタブで明確に区切られている場合、cutはスペースではなくタブで切り取ります。

cut -f7 filename

あなたは確かにawkでもそれを行うことができます:

awk -F'\t' '{ print $7 }'
18
tripleee

フィールドがタブで区切られていて、一部のフィールドにスペースが含まれているという懸念がある場合、ここでは問題ありません。

cut -f 7

(デフォルトはタブ区切りフィールドにカットされます。)

5
ysth

入力ファイルの形式から判断すると、スペースの代わりに-で区切ることができます:

awk 'BEGIN{FS="-"} {print $2}' filename
  • FSはField Separatorの略で、入力の区切り文字と考えてください。
  • -で区切られていることを考えると、前の7番目のフィールドが2番目のフィールドになります。
  • 猫を救う !代わりに、入力ファイルfilenameをawkの引数として指定します。

または、データフィールドがタブで区切られている場合は、次のように明示的に行うことができます。

awk 'BEGIN{FS="\t"} {print $7}' filename

Out Global Doc Markはスペースで区切られているように見えるため、これにより問題が解決します。

2
sampson-chen