
区切り記号付きのファイルがあり、|
最初のフィールドとは異なるフィールドを印刷し、$1
正規表現に一致する部分を印刷する必要があります \[(.*?)\>
。
cat x.txt |nawk -F"|" '{print $1"|"match regex $2,"|" match regex $3}'
どうすればいいですか?
答え1
まず、そもそもcatコマンドは必要ありません。コマンドラインの最後に「<x.txt」を使用してファイル出力をawkにリダイレクトできます。より良いことは、awkが処理するファイル名を引数として使用できることです。だから私はあなたが次のことをしたいと思います:
awk -F"|" '{
printf "%s", $1;
for (i=2; i<=NF; i++) {
if (match($i, /\[(.*?)>/)) {
printf " %s", substr($i,RSTART,RLENGTH);
}};
printf "\n"
}' x.txt
ファイルの各行に最初のフィールドを印刷し、残りの各フィールド(存在する場合)で見つかったすべての正規表現一致を印刷します。出力フィールドはスペースで区切られます。これは、2番目のprintfコマンドで先行スペースを編集することで変更できます。