Awk 如何删除分隔文件中的前三列

Awk 如何删除分隔文件中的前三列,awk,Awk,例如,我有一个csv文件,如下所示 12345432|1346283301|5676438284971|13564357342151697 ... 87540258|1356433301|1125438284971|135643643462151697 ... 67323266|1356563471|1823543828471|13564386436651697 ... 还有数百列,但我想删除前三列并保存到一个新文件(如果可能的话,相同的文件对我来说会更好) 这就是我想要的结果 1356435

例如,我有一个csv文件,如下所示

12345432|1346283301|5676438284971|13564357342151697 ...
87540258|1356433301|1125438284971|135643643462151697 ...
67323266|1356563471|1823543828471|13564386436651697 ...
还有数百列,但我想删除前三列并保存到一个新文件(如果可能的话,相同的文件对我来说会更好)

这就是我想要的结果

13564357342151697 ...
135643643462151697 ...
13564386436651697 ...
我一直在寻找和尝试,但我不能做到这一点。下面是我的代码

awk -F'|' '{print $1 > "newfile"; sub(/^[^|]+\|/,"")}1' old.csv > new.csv

如果有人能帮助我,我将不胜感激。多谢各位

您可以使用
cut

cut -f4- -d'|' old.csv  > new.csv

这就是你要找的:

awk-F'|'{$1=$2=$3=“;打印$0}'旧文件>新文件

但它将有前导空格,因此添加以下替换:

sub(/^[\t\|]+/,“”)更改为sub(/^[\t\|]+/,“”)(从列删除中转义前导“|”)

awk-F'|'{$1=$2=$3'';OFS=“|”;sub(/^[\t\|]+/,”);print$0}'oldFile>newFile

@Heng:试试:

awk -F"|" '{for(i=4;i<=NF;i++){printf("%s%s",$i,i==NF?"":"|")};print ""}'  Input_file

awk-F“|”{for(i=4;i检查@Utsav我试过了,但是我的数据都弄乱了。是因为我的定界符比
awk
更有效吗?非常感谢。你们知道我可以一次将前三列剪切成10个文件吗?我需要使用循环吗?@HengUnn:请发布示例输入和预期输出,以便更清晰@RavinderSingh13示例输入和输出与我在上面发布的内容完全相同。我只有10个文件,我只需要删除前三列。我想知道是否有任何方法可以一起删除10个文件?因此,我只需要删除前三列,每次只删除10个文件。@HengUnn:请使用我的awk命令和然后输入文件1输入文件2输入文件3………输入文件10,并让我知道这是否对您有帮助。谢谢@RavinderSingh13!剪切也有效。您知道我可以一次删除10个文件的前三列吗?我需要使用循环剪切还是awk?是的,使用awk我们可以做到,但我们需要知道您的要求和预期输出我想把输出保存到csv文件中。如果我按照你建议的输入文件1输入文件2输入文件3………输入文件10,这是否意味着我也必须将其输出到单独的文件名中?因为我所有的10个文件都有类似的名称,如REPORT_A1_1、REPORT_A1_2、REPORT_A1_3。。。。。。。.REPORT_A1_10,所以我想知道我是否可以有一个函数来调用所有这10个要按顺序删除的文件?我在这里发表了评论。@RavindersingH13请检查我对我的答案的编辑,如果您的问题也解决了,您可能会喜欢它:)谢谢@SVTAnthony我尝试了你的代码,但是我的输出被弄乱了。所有列都被放在一列中。使用
awk-I-in-place-F'.''''''''''{$1=$2=$3=“”;gsub(/\s+/,“|”)}1'data.txt
我刚刚编辑了这个示例以满足你的需要。我遗漏的是输出字段分隔符(OFS),我还对删除字段导致的主要分隔符进行了一些清理。感谢您让我知道。在设置
$1=$2=$3=“”
之前,应该先设置
OFS
——最好是在BEGIN或命令行
-vOFS='''.
——然后您只需要
子(/^\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/,“)
或更简单的
打印子($0,4)
Hi!,请阅读并尝试解释为什么会出现此代码。谢谢!虽然欢迎使用此代码片段,并可能提供一些帮助,但这将是如何以及为什么会解决此问题的。请记住,您是在将来为读者回答问题,而不仅仅是现在提问的人!请您的答案添加解释,并说明适用的限制和假设。
awk -F"|" '{for(i=4;i<=NF;i++){printf("%s%s",$i,i==NF?"\n":"|")};}'  Input_file
awk -F"|" 'FNR==1{++e;fi="REPORT_A1_"e;} {for(i=4;i<=NF;i++){printf("%s%s",$i,i==NF?"\n":"|") > fi}}'   Input_file1  Input_file2  Input_file3
awk -F\| '{print $NF}' file >newfile

13564357342151697 ...
135643643462151697 ...
13564386436651697 ...