我有以下內容的文件:加引號的空間認識列
"aaa" "aaa bbb" "c cc c" "ddd"
我要找的命令,將顯示我指定的列。
我嘗試使用:
awk '{print $1}'
但如果像「C CC C」 doublequetoes空格字符它不能正常工作。
在此先感謝您的幫助。
我有以下內容的文件:加引號的空間認識列
"aaa" "aaa bbb" "c cc c" "ddd"
我要找的命令,將顯示我指定的列。
我嘗試使用:
awk '{print $1}'
但如果像「C CC C」 doublequetoes空格字符它不能正常工作。
在此先感謝您的幫助。
您可以使用FPAT
變量在GNU ,AWK打破基於正則表達式的列:
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個引號之間的每個字段值。
不錯的一個。特別是'FPAT'變量。 – sat
感謝您的幫助! :-) – user3461823
Perl來拯救!使用Text::CSV模塊:
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];
}'
利用溶液傳統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"
所以你覺得如何AWK識別列? –
嗨Karoly,我知道它是如何工作的(它使用空格),我知道可以定義自己的字段分隔符。我不知道如何定義這樣的分隔符。 – user3461823
https://www.google.com/search?q=awk+define+own+field+seperator(原文如此!) –