次の出力ラインがあります。
M file.txt
次のawkプログラムを入力してください:
awk '{printf("\t%s: %s %s\n", FNR, $1, $2)}'
返品
1: M file.txt
これは可能であり、通常はそうです。ただし、ファイルにスペースがあり、出力行が次のような場合:
M "tmux split-window subcommand.md"
awkはこれを提供します:
1: M "tmux
ただし、希望の出力は次のとおりです。
1: M "tmux split-window subcommand.md"
この問題をどのように解決できますか?
答え1
現在の行に行番号を追加するには、次のコマンドを使用しますawk
。
awk '{ printf("%d: %s\n", FNR, $0) }'
0番目のフィールド$0
は行全体です。
答え2
区切り文字を使用すると、引用符の間のスペースは別の単語として扱われません。
したがって、入力文字列に表示されないと思われる区切り文字を使用できます。
echo 'M "tmux split-window subcommand.md"' | awk -F: '{printf("\t%s: %s %s\n", FNR, $1, $2)}' 1: M "tmux split-window subcommand.md"
答え3
この試み:
#!/usr/bin/awk -f
BEGIN {
#FPAT = "([^,]+)|(\"[^\"]+\")" # seperator is ,
#FPAT = "([^,]*)|(\"[^\"]*\")" # seperator is , and allow empty field -> notice the "+" changed to "*"
FPAT = "([^ ]+)|(\"[^\"]*\")" # seperator is <space> -> notice the "," changed to " "
}
{
printf("%d: ", FNR);
for (i = 1; i <= NF; i++) {
printf("%s ", $i)
}
printf("\n");
}
GNU awkオンラインマニュアルから入手しました。この一つ。 https://www.gnu.org/software/gawk/manual/html_node/Splitting-By-Content.html