shell - 将每行的一部分修改为新值的 shell 脚本
问题描述
我有一个文件,每行包含一个日期时间值我有一个命令可以将所有值更改为今天的日期,但我不仅需要能够更改为今天,而且假设前 10 行更改为今天,接下来的 10 行要更改为昨天的日期,依此类推。你能帮我解决这个问题吗?
文件片段:
bla|TRANSACTTIME=20181127153310|bla|bla
bla|TRANSACTTIME=20181127153310|bla|bla
bla|TRANSACTTIME=20181127153310|bla|bla
bla|TRANSACTTIME=20181127153310|bla|bla
解决方案
我认为这应该有效,
#!/bin/bash
set +x
STEP=3 #size of the block you want to modify
DATE_STEP=1 #how many days you want to step
BASEDATE=20181127 #basedate you want to replace
LINES=$(cat $1 | wc -l)
BLOCKS=$((LINES / STEP ))
MODULE=$((LINES % STEP ))
if [ "$MODULE" -ne "0" ];
then
BLOCKS=$((BLOCKS + 1))
fi
START=1
END=$STEP
ADD_DAYS=0
for i in $(seq 1 $BLOCKS);
do
NEWDATE=$(date +'%Y%m%d' -d"today+$ADD_DAYS days")
#sed is used twice, first to get the required lines and then to do the replacement
sed -n ${START},${END}p $1 | sed s/$BASEDATE/$NEWDATE/
START=$((END + 1))
END=$((END + STEP))
ADD_DAYS=$((ADD_DAYS + DATE_STEP))
done
输出直接到标准输出
推荐阅读
- node.js - 使用 JWT 的安全 API
- r - 如何强制 cva.glmnet() 在弹性网络回归 mdoel 中包含指定变量?
- javascript - 如何判断A是否包含B?在 JavaScript 中
- android - 未解决的参考:runOnUiThread Kotlin
- r - 如何将 R 闪亮应用程序的不同 git 分支部署到 shinyapps.io 中的不同目的地?
- ios - UICollectionViewDiffableDataSource:当collection view只有0个section时,请求section 0的item数
- excel - Excel如何从单列搜索结果中抓取整行数据
- angular - Angular:如何访问索引 - 数组中的键值
- io - 有没有办法在不使用该模块中的函数的情况下打印模块类型?
- xamarin.forms - Picker 的 ItemDisplayBinding 的 MultiBinding 在添加新项目时抛出 Null 引用异常