Bash 使用awk根据数据将文件拆分为不同的部分
我需要使用awk将文件1中的数据分割成4美元的数据。目标文件名应取自映射文件2 文件1 文本;文本;文本;AB;文本Bash 使用awk根据数据将文件拆分为不同的部分,bash,awk,Bash,Awk,我需要使用awk将文件1中的数据分割成4美元的数据。目标文件名应取自映射文件2 文件1 文本;文本;文本;AB;文本 文本;文本;文本;AB;文本 文本;文本;文本;光盘文本 文本;文本;文本;光盘文本 文本;文本;文本;环境足迹;文本 文本;文本;文本;环境足迹;正文 文件2 AB;有效 光盘无效 环境足迹;未指定 所需输出,其中文件名在文件2中的值为$2 文件有效 文本;文本;文本;AB;文本 文本;文本;文本;AB;正文 文件无效 文本;文本;文本;光盘文本 文本;文本;文本;光盘正文 未
文本;文本;文本;AB;文本
文本;文本;文本;光盘文本
文本;文本;文本;光盘文本
文本;文本;文本;环境足迹;文本
文本;文本;文本;环境足迹;正文 文件2 AB;有效
光盘无效
环境足迹;未指定 所需输出,其中文件名在文件2中的值为$2 文件有效 文本;文本;文本;AB;文本
文本;文本;文本;AB;正文 文件无效 文本;文本;文本;光盘文本
文本;文本;文本;光盘正文 未指定文件 文本;文本;文本;环境足迹;文本
文本;文本;文本;环境足迹;正文
有关如何执行拆分的任何建议?使用
awk
:
awk -F';' 'FNR==NR {a[$1]=$2;next} $4 in a {print > a[$4]}
$4 != p {if (p) close(a[p]); p=$4}' file2 file1
使用
awk
:
awk -F';' 'FNR==NR {a[$1]=$2;next} $4 in a {print > a[$4]}
$4 != p {if (p) close(a[p]); p=$4}' file2 file1
使用
awk
:
awk -F';' 'FNR==NR {a[$1]=$2;next} $4 in a {print > a[$4]}
$4 != p {if (p) close(a[p]); p=$4}' file2 file1
使用
awk
:
awk -F';' 'FNR==NR {a[$1]=$2;next} $4 in a {print > a[$4]}
$4 != p {if (p) close(a[p]); p=$4}' file2 file1
似乎只有代码的第一部分起作用:
awk -F';' 'FNR==NR {a[$1]=$2;next} $4 in a {print > a[$4]}' file2 file1
那么,为什么最后一半代码是:
$4 != p {if (p) close(a[p]); p=$4
需要什么?谢谢 似乎只有代码的第一部分起作用:
awk -F';' 'FNR==NR {a[$1]=$2;next} $4 in a {print > a[$4]}' file2 file1
那么,为什么最后一半代码是:
$4 != p {if (p) close(a[p]); p=$4
需要什么?谢谢 似乎只有代码的第一部分起作用:
awk -F';' 'FNR==NR {a[$1]=$2;next} $4 in a {print > a[$4]}' file2 file1
那么,为什么最后一半代码是:
$4 != p {if (p) close(a[p]); p=$4
需要什么?谢谢 似乎只有代码的第一部分起作用:
awk -F';' 'FNR==NR {a[$1]=$2;next} $4 in a {print > a[$4]}' file2 file1
那么,为什么最后一半代码是:
$4 != p {if (p) close(a[p]); p=$4
需要什么?谢谢 下次
awk
打开文件时,当您添加close(…)
时,它将覆盖该文件。如果不关闭(…)很可能会有太多打开的文件出错。FWIW GNU awk为您处理文件关闭,因此无需手动操作。您可以在每次$4更改时关闭上一个输出文件,在这种情况下应该特别有效,因为输入看起来是按$4排序的。听起来不错,但是在条件p&&&4!=p
因为它将停止p
的填充,而close(p)
在p
未填充时将不起任何作用。哦,是的。我犯了一个愚蠢的错误。现在修好了。再次感谢。噢,它应该是close(a[p])
而不是close(p)
。下次awk
打开文件时,当您添加close(…)
时,它将覆盖该文件。如果不关闭(…)很可能会有太多打开的文件出错。FWIW GNU awk为您处理文件关闭,因此无需手动操作。您可以在每次$4更改时关闭上一个输出文件,在这种情况下应该特别有效,因为输入看起来是按$4排序的。听起来不错,但是在条件p&&&4!=p
因为它将停止p
的填充,而close(p)
在p
未填充时将不起任何作用。哦,是的。我犯了一个愚蠢的错误。现在修好了。再次感谢。噢,它应该是close(a[p])
而不是close(p)
。下次awk
打开文件时,当您添加close(…)
时,它将覆盖该文件。如果不关闭(…)很可能会有太多打开的文件出错。FWIW GNU awk为您处理文件关闭,因此无需手动操作。您可以在每次$4更改时关闭上一个输出文件,在这种情况下应该特别有效,因为输入看起来是按$4排序的。听起来不错,但是在条件p&&&4!=p
因为它将停止p
的填充,而close(p)
在p
未填充时将不起任何作用。哦,是的。我犯了一个愚蠢的错误。现在修好了。再次感谢。噢,它应该是close(a[p])
而不是close(p)
。下次awk
打开文件时,当您添加close(…)
时,它将覆盖该文件。如果不关闭(…)很可能会有太多打开的文件出错。FWIW GNU awk为您处理文件关闭,因此无需手动操作。您可以在每次$4更改时关闭上一个输出文件,在这种情况下应该特别有效,因为输入看起来是按$4排序的。听起来不错,但是在条件p&&&4!=p
因为它将停止p
的填充,而close(p)
在p
未填充时将不起任何作用。哦,是的。我犯了一个愚蠢的错误。现在修好了。再次感谢。哦,它应该是close(a[p])
而不是close(p)
。