我想用AWK命令在模式之后删除N行。
输入file.txt
bla bla
bla bla
pattern
these lines
are not
requires
I want to delete
these...
up to nth line
....
....
所需输出file.txt
bla bla
bla bla
pattern
试解
awk '/pattern/ {exit} {print}' file.txt
我找到了这个命令,但我也需要“模式”。请帮帮我!
我有一个listA,它看起来像这样:
gene1
gene2
gene11
gene22
gene23
我也没有几个标签分隔的文本文件(*hist.txt),其第4列与列表中的基因匹配。我想从标签分隔的文本文件中提取listA中每个基因的值。
这就是我写的
for i in `cat listA.txt`
do
for a in *hist.txt
do
fn=${a%%_*}
cat $a | awk -v OFS="\t" -v fn="$fn" -v pattern="$i" '$4
这是我的foobar.sh的代码:
!#/bin/bash
while [ 1 ]
do
pid=`ps -ef | grep "mylittleprogram" | grep -v grep | awk ' {print $2}'`
echo $pid
if [ "$pid"="" ]
then
echo "Process has ended lets get this show on the road..."
exit
el
我有一个非常恼人的问题:我有两个文件,我正在使用,我需要替换原始文件的列,同时保持它的格式不变。这是格式:
HETATM 1 CA LIG 1 38.925 -1.038 -22.754 1.000.00 Ca
HETATM 2 CA LIG 1 38.509 -0.159 -22.703 1.000.00 Ca
HETATM 3 CA LIG 1 37.873 -0.673 -22.309 1.000.00 Ca
HETATM 4 CA LIG 1 37.261 -1.434 -22.569 1.000.00 Ca
HETATM 5 CA LIG 1 37.800 -2.277 -22.3
我使用过的典型tsv文件片段
10 Interstellar Main Theme Extended UDVtMYqUAyw
11 Journey XvG78AmBLc4
12 Jurassic Park Music & Ambience Amazing Soundscapes and Music PPl__iyIg6w
13 Lord of the Rings Sound of The Shire chLZQtCold8
14 Lord of the Rings The Shire: Sunset at Bag End uBmbI8dzc-M
在
根据堆栈溢出问题如何使用sed/grep提取两个单词之间的文本?中的答案,我们可以得到两个单词之间的文本:
sed -n "/first/,/second/p" file
但是,如果我想在一个单词和文件的最后一行之间获取文本怎么办,如下所示?
sed -n "/word/,/lastline/p" file
在Awk中,当我将正则表达式存储在变量中时,可以在任何需要正则表达式的地方使用该变量吗?
Aho的AWK编程语言说
注意,字符串匹配模式/Asia/是$O ~ /Asia/的缩写。
我有一个文本文件:
$ cat f1
line 1; li
ne
2
line 3
lin
e 4
为什么以下两种方式起作用
$ awk -v pat='in' '{if (match($0, pat)) print $0; } ' f1
line 1; li
line 3
lin
$ awk -v pat='in' ' $0 ~ pat {print $0}
我有以下几句话:
given some books I've given to my son.
注意“给定”前面的四个空格。我想用正则表达式匹配行开头的“给定”空格。我不希望第二个“给予”匹配。
如果我使用\s*given,它将匹配两个单词。如果我为行的开头添加^ (^\s*given),它也不匹配。
尝试在这个\s*The上输入^\s*The和^\s*The来理解问题。
编辑
由于某些原因,fox示例现在起作用,regex在另一个站点上工作,下面是我的完整示例:
given an egg
and some milk
and the ingredient f
我一直在使用AWK一行,它很好地识别了前几行上的字符串匹配,即比较了第n行上的字段x和y行上的字段y (n+1)。例如,假设输入文件由行组成,每个字段有3个:
A B C
B B B
C C C
D B D
一个班轮是:
awk "$2==a[2] { print a[1],a[2],a[3] } { for (i=1;i<=NF;i++) a[i]=$i }"
因此,此示例输出与字段2匹配的任何的所有前一行的所有三个字段,在本例中仅为第1行。
A B C
现在,我想知道是否对此命令进行了修改,使我能够找到当前行和它之前的2行,或者之前的3行,甚至4行之间的匹配。
因此,
如果两个字符串立即匹配,我将使用awk -F命令打印下一组单词。
如果搜索关键字中的一个在变量中重复,则采用最后匹配的键模式。但我想要第一个匹配的图案。
编辑:在下面的例子中,我需要搜索CREATE和TABLE关键字,它们可以出现在任何行或被任何单词分割。无论它是什么,如果有匹配的CREATE & TABLE关键字,打印下一个元素如下。
a="Hello I have a CREATE set or multiset TABLE as TABLE (uid, cid, mid)"
echo "$a" | awk -F"CREATE.*TABLE&