如何轻松地将换行列表转换为列表?

如何轻松地将换行列表转换为列表?


以下是 2020 年最糟糕的 200 个密码。
https://nordpass.com/most-common-passwords-list/

有什么简单的转换方法?

将 上述网页中的
200 行复制并粘贴到 file1.txt 中

从此命令开始...

cat file1.txt | tr "\n" "\t" > file2.txt   

转换 file1.txt -- 换行列表:

Position
Password
Number of users
Time to crack it
Times exposed
1.
arrow up green
(2)
123456
2,543,285
Less than a second
23,597,311
2.
arrow up green
(3)
123456789
961,435
Less than a second
7,870,694
3.
(new)
picture1
371,612
3 Hours
11,190
4.
arrow up green
(5)
password
360,467
Less than a second
3,759,315
5.
arrow up green
(6)
12345678
322,187
Less than a second
2,944,615
6.
arrow up green
(17)
111111
230,507
Less than a second
3,124,368
7.
arrow up green
(18)
123123
189,327
Less than a second
2,238,694
8.to...200.  


将上面的file1.txt 换行列表转换为
file2.txt 列表:

Position              Password    Number of users  Time to crack it     Times exposed   
1.arrow up green(2)   123456      2,543,285        Less than a second   23,597,311  
2.arrow up green(3)   123456789   961,435          Less than a second   7,870,694   
3.(new)               picture1    371,612          3 Hours              11,190  
4.arrow up green(5)   password    360,467          Less than a second   3,759,315   
5.arrow up green(6)   12345678    322,187          Less than a second   2,944,615   
6.arrow up green(17)  111111      230,507          Less than a second   3,124,368   
7.arrow up green(18)  123123      189,327          Less than a second   2,238,694
8.to...200.   

有什么简单的转换方法?

--

答案1

如果每行输出恰好由 5 行输入组成(如标题一样),那么使用 会很容易<file1 paste - - - - -。不幸的是,标题占用 5 行,条目每个占用 6 或 7 行。这意味着您需要一些逻辑来从正确数量的输入行构建输出行。

可以是这样的:

<file1.txt sed '
1 ! {
 N
 /(.*)/ ! N
 s/\n//g
}
N;N;N;N
s/\n/\t/g
'

处理第一行时,条件 ( 1 !) 为假,因此跳过块 ( {…})。接下来的四行被附加到模式空间 ( N;N;N;N) 中,并且所有五行之间的换行符都转换为制表符 ( s/\n/\t/g)。最后,模式空间打印一个尾随换行符(因为sed默认情况下会自动执行此操作)。这是标题。

稍后条件 ( ) 为真,因此执行1 !块 ( )。块内会将一个额外的行 ( ) 附加到模式空间中。如果模式空间不包含括号 ( ),则会附加另一行 ( )。两行或三行之间的换行符将被删除(替换为空,)。此时我们有了第一个字段。处理在块之后继续,就像在标题的情况下一样。{…}N/(.*)/ !Ns/\n//g

您决定这是否是一种“简单的方法”。:)

输出采用制表符分隔的列形式,非常适合进一步解析。如果您希望输出看起来不错,则可以使用管道sed(column -t -s $'\t'其中$'\t'扩展为文字制表符;此语法在 Bash 中有效,但并非所有其他 shell 都支持它)。

相关内容