我希望读取filein.txt (以制表符分隔),并输出只有与给定列值匹配的行的fileout.txt,并消除被查询的列。即,
filein.txt
#name\thouse\taddress
roger\tvictorian\t223 dolan st.
maggie\tfrench\t12 alameda ave.
kingston\tvictorian\t224 house st.
robert\tamerican\t22 dolan st.
假设我只想选择victorian风格的房屋行,那么我的fileout.txt应该是这样的:
fileout.txt
#name\taddress
这是一个例子档案。我希望在由两个shell变量定义的范围内打印列2中的数字的行。
Test 198 A 0
Test 199 A 2
Test 2 A 0
Test 202 A 22
Test 122859 G 199
Test 198589 A 0
例如,如果$start=198和$end=202,我只需要这些行:
Test 198 A 0
Test 199 A 2
Test 202 A 22
不
Test 122859
我是一个完全不熟悉shell脚本和bash的人。我的问题是,如何让awk解释一个包含换行符的变量,就像awk解释stdin中的数据一样?
示例:
fileData=`cat /path/to/file`
echo $fileData | awk '{print $1}'
上面的代码产生了以下错误消息:awk: program limit exceeded: maximum number of fields size=32767,这显然意味着awk同时解释$fileData中的所有行,而不是一次解释一行。
如何让awk从一个变量中一次解释一行?
使用regexp字符串,如何删除包含匹配的第一行之前的所有行?例如,我如何才能改变这一点:
lost
load
linux
loan
linux
这方面:
linux
loan
linux
我试过:
echo "lost
load
linux
loan
linux" | sed -e 's/.*^li.*$//g'
但是它返回这个,而不是改变任何东西:
lost
load
linux
loan
linux
我想让它工作,这样当没有匹配的时候,它就不会输出任何东西。
我正在尝试编写一个脚本,在这个脚本中,我将一个shell变量传递给一个awk命令,但是当我运行它时什么也没有发生,我尝试只在shell中运行这一行,我发现没有像我预期的那样发生变量扩展。代码如下:
1 #!/bin/bash
2
3 # Created By Rafael Adel
4
5 # This script is to start dwm with customizations needed
6
7
8 while true;do
9 datestr=`date +"%r %d/%m/%Y"`
10
我试图在这两行之间找到文本,起始行包含一个索引(变量),所以我需要将它从shell传递到awk。但我无法弄清楚如何将/start/,/end/构造与变量混合。
这是输入数据:
echo "$x"
abc def 1
hey there
end
abc def 2
hello there
whats up
end
abc def 3
howdy
end
这很好,但是它很难编码索引(例如2)。
echo "$x" |awk '/abc def 2/,/end/'
abc def 2
hello there
whats up
end
一些幼稚的尝试
我有一个非常大的文本文件。如果当前行的末尾有一个单词OR,我希望将下一行合并到当前行中。例如:就像下面的几行
somerandomstring OR
someotherrandomstring
上面的两行应该变成
somerandomstring OR someotherrandomstring
只有这些行应该改变。其余的行必须保持原样。提前谢谢。
请允许我进一步扩展这个问题。我还想看看如果下一行以OR开头,并且OR不在当前行的末尾,那么如何同时实现上述情况和这种情况?
使用,您可以打印与搜索查询匹配的行。添加-C选项将打印两行周围的上下文,如下所示:
> grep -C 2 'lorem'
some context
some other context
**lorem ipsum**
another line
yet another line
类似地,您可以使用grep -B 2或grep -A 2打印匹配的行,分别包含前面的两行或后面的两行,例如:
> grep -A 2 'lorem'
**lorem ipsum**
another line
yet another line
是否可以跳过匹配的行,只打印上下文