sam*_*hen 138
你可以这样做cut
:
cut -d " " -f 3- input_filename > output_filename
Run Code Online (Sandbox Code Playgroud)
说明:
cut
:调用cut命令-d " "
:使用单个空格作为分隔符(cut
默认情况下使用TAB)-f
:指定要保留的字段3-
:所有以字段3开头的字段input_filename
:使用此文件作为输入> output_filename
:将输出写入此文件.或者,你可以这样做awk
:
awk '{$1=""; $2=""; sub(" ", " "); print}' input_filename > output_filename
Run Code Online (Sandbox Code Playgroud)
说明:
awk
:调用awk命令$1=""; $2="";
:将字段1和2设置为空字符串sub(...);
:清理输出字段,因为字段1和2仍将由""分隔print
:打印修改后的行input_filename > output_filename
:和上面一样.ray*_*chi 22
这是使用Awk做到这一点的一种方法,它相对容易理解:
awk '{print substr($0, index($0, $3))}'
Run Code Online (Sandbox Code Playgroud)
这是一个没有模式的简单awk命令,因此{}
每个输入行都会运行内部操作.
操作是简单地打印从第3个字段的位置开始的子字符串.
$0
:整个输入行$3
:第3场index(in, find)
:返回find
字符串中的位置in
substr(string, start)
:返回从索引处开始的子字符串 start
如果要使用其他分隔符(例如逗号),可以使用-F选项指定它:
awk -F"," '{print substr($0, index($0, $3))}'
Run Code Online (Sandbox Code Playgroud)
您还可以通过在操作之前指定模式,在输入行的子集上操作此操作{}
.只有与模式匹配的行才会运行操作.
awk 'pattern{print substr($0, index($0, $3))}'
Run Code Online (Sandbox Code Playgroud)
模式可以是这样的东西:
/abcdef/
:使用正则表达式,默认情况下运行$ 0.$1 ~ /abcdef/
:在特定领域进行操作.$1 == blabla
:使用字符串比较NR > 1
:使用记录/行号NF > 0
:使用字段/列号Fel*_*rez 12
感谢您发布问题.我还想添加帮助我的脚本.
awk '{ $1=""; print $0 }' file
Run Code Online (Sandbox Code Playgroud)
小智 9
awk '{$1=$2="";$0=$0;$1=$1}1'
Run Code Online (Sandbox Code Playgroud)
输入
a b c d
Run Code Online (Sandbox Code Playgroud)
产量
c d
Run Code Online (Sandbox Code Playgroud)
你可以使用sed
:
sed 's/^[^ ][^ ]* [^ ][^ ]* //'
Run Code Online (Sandbox Code Playgroud)
这将查找以一个或多个非空白,空白,另一组一个或多个非空白和另一个空白开头的行,并删除匹配的材料,即前两个字段.该[^ ][^ ]*
稍高于等价,但更明确的短[^ ]\{1,\}
符号,第二个可能与GNU遇到问题sed
(不过,如果您使用--posix
作为一个选项,甚至GNU sed
不能搞砸了).OTOH,如果要重复的字符类更复杂,则编号表示法为了简洁而获胜.很容易将其扩展为处理"空白或制表符"作为分隔符,或"多个空格"或"多个空格或制表符".它也可以修改为在第一个字段之前处理可选的前导空格(或制表符)等.
对于awk
和cut
,请参阅Sampson-Chen的回答.还有其他方法来编写awk
脚本,但它们并不比给出的答案好得多.请注意,如果不希望将制表符视为分隔符,或者字段之间可能有多个空格-F" "
,awk
则可能需要将字段分隔符设置为explicit()in .POSIX标准cut
不支持字段之间的多个分隔符; GNU cut
具有有用但非标准的-i
选项,允许在字段之间使用多个分隔符.
您也可以在纯shell中执行此操作:
while read junk1 junk2 residue
do echo "$residue"
done < in-file > out-file
Run Code Online (Sandbox Code Playgroud)
它非常直接用shell做它
while read A B C; do
echo "$C"
done < oldfile >newfile
Run Code Online (Sandbox Code Playgroud)
珀尔:
perl -lane 'print join(' ',@F[2..$#F])' File
Run Code Online (Sandbox Code Playgroud)
awk:
awk '{$1=$2=""}1' File
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
110462 次 |
最近记录: |