我有一个包含以下内容的文件:
"aaa" "aaa bbb" "c cc c" "ddd"
我正在寻找能够显示指定列的命令。
我尝试使用:
awk '{print $1}'
但是如果在“c cc c”这样的双层空间中存在空格字符,则它无法正常工作。
提前感谢您的帮助。
答案 0 :(得分:4)
您可以在 gnu-awk 中使用FPAT
变量来根据正则表达式打破列:
s='"aaa" "aaa bbb" "c cc c" "ddd"'
awk -v FPAT='"[^"]+"' '{for (i=1; i<=NF; i++) printf "Field %d:: <%s>\n", i, $i}' <<< "$s"
Field 1:: <"aaa">
Field 2:: <"aaa bbb">
Field 3:: <"c cc c">
Field 4:: <"ddd">
-v FPAT='"[^"]+"'
会将每个字段值设置为2个双引号。
答案 1 :(得分:1)
使用传统awk
echo '"aaa" "aaa bbb" "c cc c" "ddd"' |
awk -c -F "^\"|\"[ \t]+\"|\"$" '{
for(i=2; i<=NF-1; i++)
printf "\"%s\"\n", $i
}'
你得到:
"aaa" "aaa bbb" "c cc c" "ddd"
答案 2 :(得分:0)
perl -MText::CSV -lwe '
my $csv = Text::CSV->new({sep_char => " "}) or die Text::CSV->error_diag;
open my $FH, "<", "input.txt" or die $!;
while (my $row = $csv->getline($FH)) {
print $row->[3];
}'