cut命令--AWK中等效的补码标志

问题描述

我刚开始编写shell脚本

我正在尝试编写一个AWK命令,该命令完全可以完成以下操作

cut --complement -c $IGnorE_RANGE file.txt > tmp

$ IGnorE_RANGE的值可以是1-5或5-10等

我无法使用cut,因为我在AIX中并且AIX不支持--complement,有什么方法可以使用AWK命令实现这一目标

示例:

file.txt

abcdef
123456

输出

cut --complement -c 1-2 file.txt > tmp

cdef
3456


cut --complement -c 4-5 file.txt > tmp
abcf
1236

cut --complement -c 1-5 file.txt > tmp
f
6

解决方法

请您尝试按照所示样本进行以下操作,编写和测试。我们有range的{​​{1}}变量,应该在awk中,我们可以根据需要传递它。

start_of_position-end_of_position

或者为了使理解更加清晰,请尝试以下操作:

awk -v range="4-5" '
BEGIN{
  split(range,array,"-")
}
{
  print substr($0,1,array[1]-1) substr($0,array[2]+1)
}
' Input_file

说明: 添加以上详细说明。

awk -v range="4-5" '
BEGIN{
  split(range,"-")
  start=array[1]
  end=array[2]
}
{
  print substr($0,start-1) substr($0,end+1)
}
'  Input_file
,

您可以在awk中进行此操作:

awk -v st=1 -v en=2 '{print substr($0,st-1) substr($0,en+1)}' file
cdef
3456

或者:

awk -v st=4 -v en=5 '{print substr($0,en+1)}' file
abcf
1236