This question is not a duplicate as someone had suggested. Mods, pay attention
我正在对包含如下信息的多个文件运行 for 循环
1 Leer Normal [status] — 100
1 Wrap Normal [physical] 15 90
4 Poison Sting Poison [physical] 15 100
9 Bite Dark [physical] 60 100
12 Glare Normal [status] — 100
17 Screech Normal [status] — 85
20 Acid Poison [special] 40 100
25 Spit Up Normal [special] — 100
25 Stockpile Normal [status] — —
25 Swallow Normal [status] — —
28 Acid Spray Poison [special] 40 100
33 Mud Bomb Ground [special] 65 85
36 Gastro Acid Poison [status] — 100
38 Belch Poison [special] 120 90
41 Haze Ice [status] — —
44 Coil Poison [status] — —
49 Gunk Shot Poison [physical] 120 80
我需要能够从中提取数据。
问题是,每个文件都有不同的列长度。
<小时/>第 2 列有时包含空格,因此压缩所有空格并使用空格作为剪切分隔符并不是一种选择。我需要用制表符分隔列而不使用特定信息,因为循环会遍历大约 800 个文件。
sed 's/ \+/ /g' | cut -f 2 -d " "
^ 不是我需要的,因为第 2 列中有空格
cut -b "5-20"
^ 也无法使用此选项,因为每个文件的列长度不同。
最佳答案
使用 sed,用一个制表符替换多个连续的空格或制表符:
sed 's/[[:space:]]\{1,\}/\t/g' file
说明:
s
:替换[[:space:]]
:空格或制表符\{1,\}
:当至少找到一个匹配项时g
:将替换应用于行中的所有出现位置
编辑:
要保留第二列中的单个空格,您只能在找到 2 个空格/制表符时进行替换:
sed 's/[[:space:]]\{2,\}/\t/g' file
关于linux - 如何将间隔列转换为制表符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44989416/