0

我有一个带有 mailids.csv 的文件名,数据格式为

eid | emailid| date

它有1000000个字段。

1| a1@xyz.com|2013-09-20 02:23:18
2| a2@xyz.com|2013-09-20 02:23:18
3| a3@xyz.com|2013-09-20 02:23:18
4| a4@xyz.com|2013-09-20 02:23:18
5| a5@xyz.com|2013-09-20 02:23:18
6| a6@xyz.com|2013-09-20 02:23:18
7|a7@xyz.com|2013-09-20 02:23:18
8|a8@xyz.com|2013-09-20 02:23:18
.
.
.
.
.
.
.
1000000| a1000000 | 2013-09-20 02:23:18

现在我想将'|file'附加到'eid|emailid|date',前500000个'Y'应该被附加,接下来的500000个'N'应该被附加。

你能帮我添加上面提到的使用linux命令吗?

4

2 回答 2

1

不确定我是否理解格式,但这是一个简单的方法:

cat 1.txt 
sd
asd
asd
asd
asd
ada
asd


awk '{if (NR > 2) { print $0"|Y"} else { print $0"|N"}}' 1.txt 
sd|N
asd|N
asd|Y
asd|Y
asd|Y
ada|Y
asd|Y
|Y

其中 NR 是行号,我在行尾添加 N 您可以使用进一步拆分awk -F"|" print $1"|"$2"|N"

更新 sed 方法

根据要求并且可能使用 sed,所需的整体调用变得更加复杂,awk 本身就是一种编程语言,它允许您真正获得每个 Next Row(行号)字符模式的特定值,简而言之,您正在解析每一行/一次一行,而 sed 真正用于更多的模式匹配和替换。尽管如此,它仍然是可能的,这是一个示例,将一些随机文件的前三行更改为是,将文件的其余部分更改为行尾的 N...

cat a1
asdas
asd
asd
as
das
d
aa
sd
sa
dsa

上面的实际文件:

现在执行 sed 行以进行更改:

file=a1; lines=$(wc -l < $file);sed "1,3 s/$/Y/" $file|sed "4,$lines s/$/N/"

产生:

asdasY
asdY
asdY
asN
dasN
dN
aaN
sdN
saN
dsaN
于 2013-09-24T13:50:09.757 回答
0

根据行数的不同,存在三种情况。在所有这些中,您可以将一些文本附加到$0,即整行。

awk 'NR==1 {$0=$0"|date"} NR>=2 && NR<=50000 {$0=$0"|Y"} NR>50000 {$0=$0"|N"}1' file

解释

  • NR==1 代表行数。因此,当我们这样做NR==n {}时,意味着{}将对 line number 执行内部命令n
  • 然后$0=$0"|date"表示将在行尾附加一些文本,以$0存储整行。其他情况也一样。

测试

鉴于您的输入:

$ cat a
1| a1@xyz.com|2013-09-20 02:23:18
2| a2@xyz.com|2013-09-20 02:23:18
3| a3@xyz.com|2013-09-20 02:23:18
4| a4@xyz.com|2013-09-20 02:23:18
5| a5@xyz.com|2013-09-20 02:23:18
6| a6@xyz.com|2013-09-20 02:23:18
7|a7@xyz.com|2013-09-20 02:23:18
8|a8@xyz.com|2013-09-20 02:23:18

它会输出(注意我使用 5 而不是 50,000):

$ awk 'NR==1 {$0=$0"|date"} NR>=2 && NR<=5 {$0=$0"|Y"} NR>5 {$0=$0"|N"}1' a
1| a1@xyz.com|2013-09-20 02:23:18|date
2| a2@xyz.com|2013-09-20 02:23:18|Y
3| a3@xyz.com|2013-09-20 02:23:18|Y
4| a4@xyz.com|2013-09-20 02:23:18|Y
5| a5@xyz.com|2013-09-20 02:23:18|Y
6| a6@xyz.com|2013-09-20 02:23:18|N
7|a7@xyz.com|2013-09-20 02:23:18|N
8|a8@xyz.com|2013-09-20 02:23:18|N

1| a1@xyz.com|2013-09-20 02:23:18|date
2| a2@xyz.com|2013-09-20 02:23:18|Y
3| a3@xyz.com|2013-09-20 02:23:18|Y
4| a4@xyz.com|2013-09-20 02:23:18|Y
5| a5@xyz.com|2013-09-20 02:23:18|Y
6| a6@xyz.com|2013-09-20 02:23:18|N
7|a7@xyz.com|2013-09-20 02:23:18|N
8|a8@xyz.com|2013-09-20 02:23:18|N
于 2013-09-24T13:50:00.037 回答