您好我正在尝试使用变量替换编写动态文件名,我无法弄清楚我在这里缺少什么。
for i in `cat justPid.csv`
do
awk -v var="$i" -F"," '{if ($1==var) {print $0 }}' uniqPid.csv > ${i}_file.txt
done
我也尝试了下面的一个和许多其他组合,但它不会打印基于$ i的多个文件名。
$cat justPid.csv
aaaa
bbbb
cccc
$cat uniqPid.csv
aaaa,1234567890
aaaa,aaaaaaaaaa
aaaa,bbbbbbbbbb
bbbb,1234567890
cccc,1234567890
dddd,cccccccccc
ffff,1234567890
有什么建议吗?
编辑: 我的初衷是根据PID(文件中的标识符)将27gb文件拆分为可管理的块,以便可以将其加载到R Studio进行分析。我正在我的笔记本电脑上工作,而不是在服务器上,因此需要将它们分成小文件。 我也在Windows上使用(" new")ubuntu bash shell。
我正在处理的较小的测试文件看起来就像Jithin发布的那样。我会尝试这些建议,并会更新这篇文章!
<div class="warn">
<div class="row container pv2">
<div class="col xs12">
<div class="display-table-cell b-text_copy-4 pr1">
<i class="msg-icon b-icon b-icon-warn"></i>
</div>
<div class="display-table-cell b-text_copy-2 b-text_weight-bold">
<div> I NEED THIS TEXT <a href=https://somelink/contact.html target=_blank>contact us</a>.</div>
答案 0 :(得分:1)
我不太确定这是你在找什么,让
输入文件
$cat justPid.csv
aaaa
bbbb
cccc
$cat uniqPid.csv
aaaa,1234567890
aaaa,aaaaaaaaaa
aaaa,bbbbbbbbbb
bbbb,1234567890
cccc,1234567890
dddd,cccccccccc
ffff,1234567890
使用for loop
的 脚本
使用for i in $(cat justPid.csv)
do
awk -v var=${i} -F, '$1==var' uniqPid.csv > ${i}_file.txt
done
while loop
脚本
<强> 输出 强> 注意:建议不要使用while read -r i
do
awk -v var=${i} -F, '$1==var' uniqPid.csv > ${i}_file.txt
done < justPid.csv
$ cat aaaa_file.txt
aaaa,1234567890
aaaa,aaaaaaaaaa
aaaa,bbbbbbbbbb
$ cat bbbb_file.txt
bbbb,1234567890
$ cat cccc_file.txt
cccc,1234567890
for loop
,请参阅链接Use a while loop and the read command , Don't Read Lines With For
答案 1 :(得分:0)
没有样本输入/输出它只是一个未经测试的猜测,但我想你所需要的只是::
awk -F, '{print > ($1"_file.txt")}' uniqPid.csv
或者也许:
awk -F, 'NR==FNR{a[$1];next} $1 in a{print > ($1"_file.txt")}' justPid.csv uniqPid.csv
到目前为止,我根本没有看到任何循环的原因。你可能需要在你去的时候关闭输出文件,但是如果你提供样本输入/输出并告诉我们你是否有GNU awk,我们可以解决这个问题。