这个问题不像有人建议的那样重复。修改,注意
我在包含以下信息的多个文件上运行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"
^不能使用它,因为每个文件的列长度不同。
答案 0 :(得分:1)
使用sed,用一个标签替换多个连续的空格或制表符:
s
<强>说明:强>
[[:space:]]
:替换\{1,\}
:空格或制表符g
:至少发现一次事件 sed 's/[[:space:]]\{2,\}/\t/g' file
:将替换应用于行修改强>:
要保留第二列中的单个空格,只有在找到2个空格/制表符时才能替换:
vector<Mat> regionMapHist(RegionRowNum * RegionColNum);
答案 1 :(得分:-1)
这正是我需要它做的。它将间隔列转换为制表符,而不会弄乱第二列中的空格。我正在运行它以检查它是否正确排序所有文件,到目前为止已经过去了40个。
sed s/\s\s\+/:/g' | sed 's/\([a-z)]\)\s\([(0-9A]\)/\1:\2/g'