如何获取具有特定字段子字符串的 csv 文件的列?
How to get columns of a csv file with substring of specific field?
我有一个包含以下内容的 csv 文件:
G11123,IT,AMIT,INDIA
G11124,IT,HEMANT,INDIA
.......
.......
我有大约 7000 行。
我需要另一个包含以下内容的 csv 文件:
G11,AMIT,INDIA
G11,HEMANT,INDIA
.........
.......
当我尝试以下命令时
awk 'BEGIN{FS=OFS=","} {print substr(,1,3),,}' file.csv > temp.csv
当我检查 temp.csv 时,第一行我没有得到预期的结果,而在所有其他行中,正确的子字符串是可见的:
,AMIT,INDIA
G11,HEMANT,INDIA
...............
...............
上面的命令有问题吗?
此致,
您可以使用逗号作为字段分隔符并使用 OFS
连接值:
awk 'BEGIN{FS=OFS=","} {print substr(,1,3) OFS OFS }' file.csv > temp.csv
参见online demo:
s='G11123,IT,AMIT,INDIA
G11124,IT,HEMANT,INDIA'
awk 'BEGIN{FS=OFS=","} {print substr(,1,3) OFS OFS }' <<< "$s"
输出:
G11,AMIT,INDIA
G11,HEMANT,INDIA
使用您显示的示例,请尝试遵循 awk
代码。如果您的 Input_file 中有超过 4 个字段,此代码甚至可以工作(因为它不是硬编码应该打印多少个字段)。
awk 'BEGIN{FS=OFS=","} {len=length();sub(".{"len-3"}$","",);="";sub(/,/,"")} 1' Input_file
解释:为以上添加详细解释。
awk ' ##Starting awk program from here.
BEGIN{ ##Starting BEGIN section of this program from here.
FS=OFS="," ##Setting FS and OFS to comma here.
}
{
len=length() ##Take length of 1st field here.
sub(".{"len-3"}$","",) ##Substituting everything apart from 1st 3 characters in 1st field with NULL.
="" ##Nullifying 2nd field here.
sub(/,/,"") ##Substituting comma with NULL here.
}
1 ##Printing current line here.
' Input_file ##Mentioning Input_file name here.
编辑: 要删除控制 M 字符和打印行,可以尝试以下操作。
awk 'BEGIN{FS=OFS=","} {sub(/\r$/,"");len=length();sub(".{"len-3"}$","",);="";sub(/,/,"")} 1' Input_file
我有一个包含以下内容的 csv 文件:
G11123,IT,AMIT,INDIA
G11124,IT,HEMANT,INDIA
.......
.......
我有大约 7000 行。
我需要另一个包含以下内容的 csv 文件:
G11,AMIT,INDIA
G11,HEMANT,INDIA
.........
.......
当我尝试以下命令时
awk 'BEGIN{FS=OFS=","} {print substr(,1,3),,}' file.csv > temp.csv
当我检查 temp.csv 时,第一行我没有得到预期的结果,而在所有其他行中,正确的子字符串是可见的:
,AMIT,INDIA
G11,HEMANT,INDIA
...............
...............
上面的命令有问题吗?
此致,
您可以使用逗号作为字段分隔符并使用 OFS
连接值:
awk 'BEGIN{FS=OFS=","} {print substr(,1,3) OFS OFS }' file.csv > temp.csv
参见online demo:
s='G11123,IT,AMIT,INDIA
G11124,IT,HEMANT,INDIA'
awk 'BEGIN{FS=OFS=","} {print substr(,1,3) OFS OFS }' <<< "$s"
输出:
G11,AMIT,INDIA
G11,HEMANT,INDIA
使用您显示的示例,请尝试遵循 awk
代码。如果您的 Input_file 中有超过 4 个字段,此代码甚至可以工作(因为它不是硬编码应该打印多少个字段)。
awk 'BEGIN{FS=OFS=","} {len=length();sub(".{"len-3"}$","",);="";sub(/,/,"")} 1' Input_file
解释:为以上添加详细解释。
awk ' ##Starting awk program from here.
BEGIN{ ##Starting BEGIN section of this program from here.
FS=OFS="," ##Setting FS and OFS to comma here.
}
{
len=length() ##Take length of 1st field here.
sub(".{"len-3"}$","",) ##Substituting everything apart from 1st 3 characters in 1st field with NULL.
="" ##Nullifying 2nd field here.
sub(/,/,"") ##Substituting comma with NULL here.
}
1 ##Printing current line here.
' Input_file ##Mentioning Input_file name here.
编辑: 要删除控制 M 字符和打印行,可以尝试以下操作。
awk 'BEGIN{FS=OFS=","} {sub(/\r$/,"");len=length();sub(".{"len-3"}$","",);="";sub(/,/,"")} 1' Input_file