次の記録があります。
2011-05-29 17:51:34 => 'HS|CMGC|RN431|CI13950|CH7-4a37-afe2-acabfc9d262d|DA110529|TI175133|'
最終出力は次のようになります。
2011-05-29 17:51:34 CI13950
次のようにカットを使用して各部分を取得できます。
$ cut -c 1-19
2011-05-29 17:51:34
$ cut -d '|' -f 4
CI13950
2つを組み合わせることはできません。
$ cut -c 1-19 -d '|' -f 4
cut: only one type of list may be specified
どんな提案がありますか?
答え1
一カットが私の役割を果たします。さらに減らすために2回実行することもできますが、次のようなcut
ものを使用する必要があるようです。awk
、sed
またはperl
代わりに。
複数の実行の例cut
:
cut -f 2 | cut -c 3-6
使用例はperl
データラインで動作します。
perl -pne "s/=> '([^|]+\|){3}([^|]+)/\2/g"
sed
コメントにあるFredのバージョンは次のとおりです。
sed -re "s/=> ([^|]*\|){3}([^|]*).*/\2/"
答え2
awk '{split($NF,x,"|"); print $1, $2, x[4]}'
答え3
この問題は次のとおりです。奇妙にもおなじみしかし、実際にはそれが最初だと思います。
私が見た最も簡単で読みやすい方法は、次のようにAwkを使用することです。
awk -F'|' '{print substr($0,1,19), $4}' text.txt
これは正確に操作コードであることを除いて、試したコマンドと同じです。 ;)cut -c 1-19 -d '|' -f 4