Shell code-循环读取CSV文件并制作另一个
Shell code- Reading a CSV file by loop and making another one
我必须执行 Shell 逐行读取 CSV 文件的代码,检查某些列值中的每一行并根据条件制作另一个新的 CSV 文件。
我已经开始这样的代码:
FileName=
while read line
do
zcat FileName awk -F'\t' ' ~/.jar/ || ~/.msi/ || ~/.dll/ || ~/.cab/ || ~/.exe/ || ~/.rar/ || ~/.mar/ || ~/.tgz/ || ~/.tar/ || ~/.gz/ || ~/.upd/ || ~/.bin/ || ~/.zip/ || ~/.pogo/ || ~/.dcr/ || ~/.qgi/ || ~/.deb/ || ~/.ipa/ || ~/symantec/ || ~/windowsupdate/ || ~/kaspersky/ || ~/adobe.com/ && ~/7/ && ~/androiddownloadmanager/ && ~/.apk/ && ~/.pak/ && ~/.vpx/ {Str="SW Download: " ;Str>> New.csv} '
echo "$line" >> new2.csv
done < FileName
注意:文件名为.gz。
(1)我收到错误:"syntax error near unexpected token `done'".
(2)我想检查新的 csv 是否会完成并包含行。
谢谢
您不需要 shell 循环。只需将 zcat
输出到 awk
:
FileName=
zcat "$FileName" | awk -F'\t' '( ~/\.jar/ || /\.msi/ || /\.dll/ || /\.cab/ || /\.exe/ || /\.rar/ || /\.mar/ || /\.tar/ || /\.gz/ || /\.upd/ || /\.bin/ || /\.zip/ || /\.pogo/ || /\.dcr/ || /\.qgi/ || /\.deb/ || /\.ipa/ || /symantec/ || /windowsupdate/ || /kaspersky/ || /adobe\.com/) && ~/7/ && ( ~/androiddownloadmanager/ && /\.apk/ && /\.pak/ && /\.vpx/) {Str="SW Download: " ;print Str > "New.csv"}'
使用变量的正确语法是 $FileName
,而不是 FileName
。
更新:
正如 tripleee 所指出的,awk
命令应该是:
zcat "$FileName" | awk -F'\t' '( ~/\.(jar|msi|dll|cab|exe|rar|mar|tar|gz|upd|bin|zip|.pogo|dcr|qgi|deb|ipa)/ || ~/(symantec|windowsupdate|kaspersky|adobe\.com)/) && ~/7/ && ~/androiddownloadmanager/ && ~/\.apk/ && ~/\.pak/ && ~/\.vpx/ {Str="SW Download: " ;print Str }'
我必须执行 Shell 逐行读取 CSV 文件的代码,检查某些列值中的每一行并根据条件制作另一个新的 CSV 文件。
我已经开始这样的代码:
FileName=
while read line
do
zcat FileName awk -F'\t' ' ~/.jar/ || ~/.msi/ || ~/.dll/ || ~/.cab/ || ~/.exe/ || ~/.rar/ || ~/.mar/ || ~/.tgz/ || ~/.tar/ || ~/.gz/ || ~/.upd/ || ~/.bin/ || ~/.zip/ || ~/.pogo/ || ~/.dcr/ || ~/.qgi/ || ~/.deb/ || ~/.ipa/ || ~/symantec/ || ~/windowsupdate/ || ~/kaspersky/ || ~/adobe.com/ && ~/7/ && ~/androiddownloadmanager/ && ~/.apk/ && ~/.pak/ && ~/.vpx/ {Str="SW Download: " ;Str>> New.csv} '
echo "$line" >> new2.csv
done < FileName
注意:文件名为.gz。
(1)我收到错误:"syntax error near unexpected token `done'".
(2)我想检查新的 csv 是否会完成并包含行。
谢谢
您不需要 shell 循环。只需将 zcat
输出到 awk
:
FileName=
zcat "$FileName" | awk -F'\t' '( ~/\.jar/ || /\.msi/ || /\.dll/ || /\.cab/ || /\.exe/ || /\.rar/ || /\.mar/ || /\.tar/ || /\.gz/ || /\.upd/ || /\.bin/ || /\.zip/ || /\.pogo/ || /\.dcr/ || /\.qgi/ || /\.deb/ || /\.ipa/ || /symantec/ || /windowsupdate/ || /kaspersky/ || /adobe\.com/) && ~/7/ && ( ~/androiddownloadmanager/ && /\.apk/ && /\.pak/ && /\.vpx/) {Str="SW Download: " ;print Str > "New.csv"}'
使用变量的正确语法是 $FileName
,而不是 FileName
。
更新:
正如 tripleee 所指出的,awk
命令应该是:
zcat "$FileName" | awk -F'\t' '( ~/\.(jar|msi|dll|cab|exe|rar|mar|tar|gz|upd|bin|zip|.pogo|dcr|qgi|deb|ipa)/ || ~/(symantec|windowsupdate|kaspersky|adobe\.com)/) && ~/7/ && ~/androiddownloadmanager/ && ~/\.apk/ && ~/\.pak/ && ~/\.vpx/ {Str="SW Download: " ;print Str }'