我在试图拆分文件时遇到了问题。有人能帮我吗?
样本内容:
apple fruit
goa fruit
tomato vegetable
tiger animal 剧本:
#!/bin/bash
awk 'FNR==1 { hdr = $0; next }
{
if(!f[$2]) { print hdr >"file" $2".htm"; f[$2] = 1 }
print >>"file" $2".htm"
}' samplefile.txt发布于 2019-04-08 14:56:22
如果sun o.s使用/usr/xpg4/bin/awk或/usr/xpg6/bin/awk(请参阅本答案中的评论以获得更多详细信息),请您尝试以下操作(因为没有给出样本)。
好像OP使用的是旧的、坏掉的awk,其中close函数不能按照下面的解决方案工作,所以我建议OP使用xpg awk,后来Ed也证实了这一点。
#!/bin/bash
awk 'FNR==1 { hdr = $0; next }
{
if($2 != prev){close(file)}
file="file" $2 ".htm"
if(!f[$2]) {print hdr > file; f[$2] = 1 }
print >> file
prev=$2
}' samplefile.txt或尝试:
#!/bin/bash
awk 'FNR==1 { hdr = $0; next }
{
file="file" $2 ".htm"
if(file!=prev){close(prev)}
if(!f[$2]) {print hdr > file; f[$2] = 1 }
print >> file
prev=file
}' samplefile.txt发布于 2019-04-08 15:13:21
您可能已经用完了FDs,使用close()并尝试如下所示:
$ awk '
FNR==1 {
hdr = $0
next
}
{
filename="file" $2 ".htm"
if(!f[$2]) {
print hdr >> filename
f[$2] = 1
}
print >> filename
close(filename)
}' file哦,TIL:旧的Solaris awk没有关闭命令,甚至没有足够聪明到说“我不知道关闭”的错误。
发布于 2019-04-08 15:46:21
如果您没有使用GNU awk (在后台为您这样做),那么您需要手动关闭由于输入或输出重定向而打开的任何文件--您正在手动打开它们,因此需要手动关闭它们:
awk '
FNR==1 { hdr = $0; next }
$2 != prev {
close(out)
out = "file" $2 ".htm"
if ( !seen[out]++ ) {
print hdr > out
}
prev = $2
}
{ print >> out }
' samplefile.txthttps://stackoverflow.com/questions/55576187
复制相似问题