**$&*#@**
我有一个带有字段分隔符和**$#@&***
记录分隔符的隐式文件。下面是一个例子,
100$&*#@200$&*#@50$&*#@Some String$&*#@2016-01-01 101010$#@&*101$&*#@210$&*#@51$&*#@Some String$&*#@2016-02-02 101010$#@&*102$&*#@220$&*#@55$&*#@Some String$&*#@2016-03-03 101010$#@&*
我需要一些命令从上面的文件中提取第一行以进行数据验证。
请注意,在这种情况下wc -l
返回零,因为它是连续流(隐式文件),因此我不能使用 head -1。
此外,我必须提取每个字段并进行验证,以确保前三个字段是整数,并且特定数字字段是具有特定格式的时间戳。
答案1
我使用了一个名为 的变量string
来存储您的示例。下面sed
应该将您分成string
几行,并用 分隔字段:
。您可以通过管道将其输入 ahead -1
以获得第一行:
echo $string | sed 's/'"$#@&\*"'/\n/g'| sed 's/'"$&\*#@"'/:/g'
然后您可以使用cut
获取每行的前三个字段并验证它们是否仅为数字。测试第一个字段的示例:
field1="$(echo $new_string | cut -d: -f1 | head -1)"
if [ "$field1" -eq "$field1" ] 2>/dev/null; then
echo "Integer.
else
echo "Not integer."
fi
您可以使用循环解析和验证所有值。测试日期可能更复杂但可行,可能使用正则表达式等。