如果我的文件包含以下句子:
I like apples and oranges
but I hate broccoli
我该如何将文件中的以下字符串存储到变量:
ut I hate broc
我尝试使用mycut=$(cut -c 2-15 file)
,但这是从文件(mycut == "I like apples a ut I hate broc")
的两行开始切入的。我只想从该特定行中获取那些特定字符位置的字符串。有什么办法可以做到这一点?
如果有比使用cut更好的方法,那也可以。
答案 0 :(得分:1)
这是AWK的有效解决方案:
awk 'BEGIN{ lineIwant = 2; beginChar = 1; finalChar = 3}{ if( NR ==lineIwant ) { print substr($0,beginChar,finalChar)}}' file.txt
致谢!
答案 1 :(得分:1)
为此,剪切命令具有-c选项,您可以通过head -n | tail -1
指定行:
echo "I like apples and oranges
But i hate broccoli" |head -2|tail -1|cut -c 2-15
结果:
ut i hate broc
答案 2 :(得分:1)
.then()
是你的朋友。
sed
我正在使用$: cat x
I like apples and oranges
but I hate broccoli
$: l=3
$: s=1
$: r=14
$: sed -nE "$l { s/^.{$s}(.{$r}).*/\\1/; p; q; }" x
ut I hate broc
来抑制不需要的输出,并使用-E表示扩展表达式。双引号允许我嵌入变量,因此我可以为line($ l),skip($ s)和repeat($ r)尝试不同的值。
我告诉它只在第-n
行上使用,使用s ///删除前导和尾随数据,然后打印该行并退出。 $l
对所有命令进行分组,因此其他任何一行都不会发生。
答案 3 :(得分:1)
在这里您会发现几行Awk行,这些行可能有助于获取文本文件的信息。
计算字符/单词/行/句/段落:
awk '{n++}END{print n}' file # lines
awk '{n+=NF}END{print n}' file # words
awk '{n+=length($0)}END{print n}' file # characters
awk 'BEGIN{RS=""}{n++}END{print n}' file # paragraphs
awk 'BEGIN{RS="";FS="[.?!]+"}{n+=NF}END{print n}' file # sentences
检索第n
个字符/单词/行/句/段落:
awk '(NR==n){print; exit}' file # line
awk 'BEGIN{RS=""}(NR==n){print;exit}' file # paragraph
awk 'BEGIN{c=n}(c-NF<=0){print $c; exit}{c-=NF}' file # word
# character
awk 'BEGIN{c=n}(c-length($0)<=0){print substr($0,c,1); exit}{c-=length($0)}' file
# sentence
awk 'BEGIN{RS="";FS="[.?!]+";c=n}(c-NF<=0){print $c; exit}{c-=NF}' file
在第p
行中检索第n
个字符/单词:
awk '(NR==n){print $p; exit}' file # word
awk '(NR==n){print substr($0,p,1); exit}' file # character
从p
行的n
中检索所有字符/单词:
awk '(NR==n){print substr($0,p); exit}' file # character
awk '(NR==n){for(i=p;i<NF;++i) printf $i OFS;print $NF; exit}' file # word
在第p
行中检索q
至n
中的字符/单词:
awk '(NR==n){print substr($0,p,q-p+1); exit}' file #character
# word
awk '(NR==n){for(i=p;i<(q>NF?q:NF);++i) printf $i OFS; print $(q>NF?q:NF);exit}
检索段落p
中的字符q
至n
:
awk 'BEGIN{RS="";FS="\n"}(NR==n){print substr($0,p,q-p+1); exit}' file
检索第p
段中的第n
个字符/单词/句子:
# character
awk 'BEGIN{RS=""}(NR==n){print substr($0,p,1); exit}'
# word
awk 'BEGIN{RS=""}(NR==n){gsub(/\n/," ",$0);print $p; exit}' file
# sentence
awk 'BEGIN{RS="";FS="[.?!]+";c=n}(NR==n){print $p; exit}' file