awk对两个字段进行排序:
想根据字段$1 and $5
对Input.csv
文件进行排序,并生成国家明智的A-Z order
。 在做排序时,如果任何字段为空,则需要考虑国家名称,或者从$ 1或$ 5。awk对两个字段进行排序:
Input.csv
Country,Amt,Des,Details,Country,Amt,Des,Network,Details
abc,10,03-Apr-14,Aug,abc,10,DL,ABC~XYZ,Sep
,,,,mno,50,DL,ABC~XYZ,Sep
abc,10,22-Jan-07,Aug,abc,10,DL,ABC~XYZ,Sep
jkl,40,11-Sep-13,Aug,,,,,
,,,,ghi,30,AL,DEF~PQZ,Sep
abc,10,03-Apr-14,Aug,abc,10,MN,ABC~XYZ,Sep
abc,10,19-Feb-14,Aug,abc,10,MN,ABC~XYZ,Sep
def,20,02-Jul-13,Aug,,,,,
def,20,02-Aug-13,Aug,,,,,
期望Output.csv
Country,Amt,Des,Details,Country,Amt,Des,Network,Details
abc,10,03-Apr-14,Aug,abc,10,DL,ABC~XYZ,Sep
abc,10,22-Jan-07,Aug,abc,10,DL,ABC~XYZ,Sep
abc,10,03-Apr-14,Aug,abc,10,MN,ABC~XYZ,Sep
abc,10,19-Feb-14,Aug,abc,10,MN,ABC~XYZ,Sep
def,20,02-Jul-13,Aug,,,,,
def,20,02-Aug-13,Aug,,,,,
,,,,ghi,30,AL,DEF~PQZ,Sep
jkl,40,11-Sep-13,Aug,,,,,
,,,,mno,50,DL,ABC~XYZ,Sep
我曾尝试下面的命令,但没有得到期望的输出。请建议..
head -1 Input.csv > Output.csv; sort -t, -k1,1 -k5,5 <(tail -n +2 Input.csv) >> Output.csv
awk
来救援!
$ awk -F, '{print ($1==""?$5:$1) "\t" $0}' file | sort | cut -f2-
Country,Amt,Des,Details,Country,Amt,Des,Network,Details
abc,10,03-Apr-14,Aug,abc,10,DL,ABC~XYZ,Sep
abc,10,03-Apr-14,Aug,abc,10,MN,ABC~XYZ,Sep
abc,10,19-Feb-14,Aug,abc,10,MN,ABC~XYZ,Sep
abc,10,22-Jan-07,Aug,abc,10,DL,ABC~XYZ,Sep
def,20,02-Aug-13,Aug,,,,,
def,20,02-Jul-13,Aug,,,,,
,,,,ghi,30,AL,DEF~PQZ,Sep
jkl,40,11-Sep-13,Aug,,,,,
,,,,mno,50,DL,ABC~XYZ,Sep
这里标题以大写字母开头,数据为小写字母。如果这不是标题为你在上面或更好做了与awk
$ awk -F, 'NR==1{print; next} {print ($1==""?$5:$1) "\t" $0 | "sort | cut -f2-"}' file
这是你想要的吗? (省略第一行)
cat file_containing_your_lines | awk 'NR != 1' | sed "s/,/\t/g" | sort -k 1 -k 5 | sed "s/\t/,/g"
谢谢你,PejoPhylo抱歉上面的命令是不是生成所需的输出 – VNA
能否请您尝试以下,让我知道如果这有助于你需要一个有效的假设进行特殊处理。头部,尾部,分类解决方案:
head -n 1 Input_file && tail -n +2 Input_file | sort -k1.1 -k5.1
输出如下。
Country,Amt,Des,Details,Country,Amt,Des,Network,Details
abc,10,03-Apr-14,Aug,abc,10,DL,ABC~XYZ,Sep
abc,10,03-Apr-14,Aug,abc,10,MN,ABC~XYZ,Sep
abc,10,19-Feb-14,Aug,abc,10,MN,ABC~XYZ,Sep
abc,10,22-Jan-07,Aug,abc,10,DL,ABC~XYZ,Sep
def,20,02-Aug-13,Aug,,,,,
def,20,02-Jul-13,Aug,,,,,
,,,,ghi,30,AL,DEF~PQZ,Sep
jkl,40,11-Sep-13,Aug,,,,,
,,,,mno,50,DL,ABC~XYZ,Sep
如果您的语言环境未设置为en_US,尝试改变sort
与LC_ALL=en_US sort
谢谢你,RavinderSingh13,对不起,我没有得到像你这样的订单,我的输出基于你的命令 – VNA
国家,金额,Des,详细信息,国家,金额,Des,网络,详细信息 ,,,, ghi,30,AL ,DEF〜PQZ,Sep ,,,, mno,50,DL,ABC〜XYZ,Sep abc,10,03-Apr-14,Aug,abc,10,DL,ABC〜XYZ,Sep abc,10 ,03-Apr-14,Aug,abc,10,MN,ABC〜XYZ,Sep abc,10,19-Feb-14,Aug,abc,10,MN,ABC〜XYZ,Sep abc,10,22 -Jan-07,Aug,abc,10,DL,ABC〜XYZ,Sep def,20,02-Aug-13,Aug ,,,,, def,20,02-Jul-13,Aug ,,, ,, jkl,40,11-Sep-13,Aug ,,,,, – VNA
尝试更改与LC_ALL = en_US排序,然后让我知道呢? – RavinderSingh13
住所,我已经重新检查没有在预期的输出没有错 – VNA