我有一个包含三列的文件。我想删除第3列(就地编辑)。我怎么能用awk或sed做到这一点?
123 abc 22.3
453 abg 56.7
1236 hjg 2.3
期望的输出
123 abc
453 abg
1236 hjg
答案 0 :(得分:56)
尝试这个简短的事情:
awk '!($3="")' file
答案 1 :(得分:26)
使用GNU awk进行就地编辑,\s/\S
和gensub()
删除
1)FIRST字段:
awk -i inplace '{sub(/^\S+\s*/,"")}1' file
或
awk -i inplace '{$0=gensub(/^\S+\s*/,"",1)}1' file
2)最后一个字段:
awk -i inplace '{sub(/\s*\S+$/,"")}1' file
或
awk -i inplace '{$0=gensub(/\s*\S+$/,"",1)}1' file
3)N th 字段,其中N = 3:
awk -i inplace '{$0=gensub(/\s*\S+/,"",3)}1' file
如果没有GNU awk,您需要match()
+ substr()
组合或多个sub()
s + vars来删除中间字段。另请参阅Print all but the first three columns。
答案 2 :(得分:16)
这可能适合你(GNU sed):
sed -i -r 's/\S+//3' file
如果要删除第3个字段前的空格:
sed -i -r 's/(\s+)?\S+//3' file
答案 3 :(得分:13)
看起来你可以简单地选择
awk '{print $1 " " $2}' file
这将打印输入文件中每行的两个第一个字段,用空格分隔。
答案 4 :(得分:7)
试试这个:
awk '$3="";1' file.txt > new_file && mv new_file file.txt
或
awk '{$3="";print}' file.txt > new_file && mv new_file file.txt
答案 5 :(得分:7)
GNU awk 4.1
awk -i inplace NF--
这将删除每一行的最后一个字段。
答案 6 :(得分:1)
尝试使用剪切...快速简便
首先你有重复的空格,你可以将它们压缩到列之间的单个空格中,如果那就是你想要的tr -s ' '
如果每个列之间只有一个分隔符,则可以使用cut -d ' ' -f-2
打印字段(列)< = 2。
例如,如果您的数据位于input.txt文件中,则可以执行以下操作之一:
cat input.txt | tr -s ' ' | cut -d ' ' -f-2
或者,如果您通过删除第3列来更好地解决此问题,则可以编写以下内容
cat input.txt | tr -s ' ' | cut -d ' ' --complement -f3
cut非常强大,除了列
之外,您还可以提取字节或字符的范围摘自关于如何指定列表范围的语法的手册页
Each LIST is made up of one range, or many ranges separated by commas.
Selected input is written in the same order that it is read, and is
written exactly once. Each range is one of:
N N'th byte, character or field, counted from 1
N- from N'th byte, character or field, to end of line
N-M from N'th to M'th (included) byte, character or field
-M from first to M'th (included) byte, character or field
所以你也可以说你想要特定的第1列和第2列......
cat input.txt | tr -s ' ' | cut -d ' ' -f1,2
答案 7 :(得分:0)
如果您愿意接受Perl解决方案...
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var schedules = new List<String>()
{
"roommailboxone@domain.onmicrosoft.com"
};
var startTime = new DateTimeTimeZone
{
DateTime = "2020-09-11T09:00:00",
TimeZone = "Pacific Standard Time"
};
var endTime = new DateTimeTimeZone
{
DateTime = "2020-09-11T18:00:00",
TimeZone = "Pacific Standard Time"
};
var availabilityViewInterval = 60;
await graphClient.Me.Calendar
.Getschedule(schedules,endTime,startTime,availabilityViewInterval)
.Request()
.PostAsync();
使用了以下命令行选项:
perl -ane 'print "$F[0] $F[1]\n"' file
在输入文件的每一行循环,不要自动打印每一行
-n
自动拆分模式–将输入行拆分为@F数组。默认为在空白处分割
-a
执行以下perl代码