いくつか方法がありますが、ちょっとづつ挙動が違うので解説します。
ここでは全て以下のsample.txtを整形した場合を例にしています。
【参考テキスト】
$ cat ./sample.txt
#1st,2nd,3rd,4th
#ID,DATE,USER,Age
1,2024/12/01,Suzuki,30
2,2024/12/03,Satoh,22
3,2024/12/04,Itoh,59
4,2024/12/07,Tanaka,48
fileName:sample.txt
cutコマンド
cutコマンドで文字列を切り抜くことができます。任意の文字列をセパレータとして、xフィールド目を取り出す方法と、x文字目〜y文字目といった指定もできます。
フィールド指定
「-d」オプションで区切り文字を指定し、「-f」 オプションで取り出すフィールドを指定します。
複数フィールドを出力する場合は、「,」で区切るか、連続で選択する場合は「-」で指定します。
- 指定した区切り文字がない場合、全量出力されます。
- フィールド間の区切り文字は、そのまま指定した区切り文字です。
■コマンド例
$ cut -d"," -f2,3 ./sample.txt
2nd,3rd
DATE,USER
2024/12/01,Suzuki
2024/12/03,Satoh
2024/12/04,Itoh
2024/12/07,Tanaka
fileName:sample.txt #「,」がない行なので全量出力されます。
※ もちろん「|」で渡しても使えます。
$ cat ./sample.txt | cut -d"," -f2-4
2nd,3rd,4th
DATE,USER,Age
2024/12/01,Suzuki,30
2024/12/03,Satoh,22
2024/12/04,Itoh,59
2024/12/07,Tanaka,48
fileName:sample.txt
文字数指定
「-c」オプションでx文字目を指定して切り出せます。
フィールド指定の「-f」オプションと同様に「,」か「-」を使って複数指定します。
「,」で区切った場合、出力のセパレータがないため連続して出力されます。
awkコマンド
セパレータにする文字が1つだけの場合
別でまとめましたが、 -Fオプションか、FS変数の指定で区切り文字を指定することで任意のフィールドを抜き出せます。
cutコマンドと違って、指定した区切り文字がない場合は空行になります。
- 指定した区切り文字がない場合は空行で出力されます。
- フィールド間の区切り文字はデフォルトだと空白です。OFS変数や構文で指定している場合、指定された文字列で区切られます。
■コマンド例
$ cat ./sample.txt | awk -F, '{ print $2,$3 }'
2nd 3rd
DATE USER
2024/12/01 Suzuki
2024/12/03 Satoh
2024/12/04 Itoh
2024/12/07 Tanaka
#「,」がないため空行となる。
※フィールド間の区切り文字はデフォルトの空白となります。
$ cat ./sample.txt | awk '{BEGIN FS=",";OFS=":"}' '{ print $2,$3 }'
2nd:3rd
DATE:USER
2024/12/01:Suzuki
2024/12/03:Satoh
2024/12/04:Itoh
2024/12/07:Tanaka
#「,」がないため空行となる。
セパレータにする文字が複数ある場合
フィールドセパレータにする文字を複数指定したい場合、awkの-Fオプションで「'[]’」を使うことで複数指定することができます。
■コマンド例 「/」「,」「:」の3つをフィールドセパレータとする場合
$ cat ./sample.txt | awk -F'[/,:]' '{ print $2,$3 }'
$ cat ./sample.txt
2nd 3rd
DATE USER
2024 12
2024 12
2024 12
2024 12
sample.txt
コメント